package com.zenithmind.chat.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 私聊会话用户状态实体类 - 遵循单一职责原则
 * 专门负责用户在私聊会话中的状态和设置
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_private_session_user")
public class ChatPrivateSessionUser extends BaseEntity {

    /**
     * 会话ID
     */
    private String sessionId;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 未读消息数
     */
    private Integer unreadCount;

    /**
     * 是否置顶
     */
    private Boolean isTop;

    /**
     * 是否免打扰
     */
    private Boolean isMuted;

    /**
     * 删除时间
     */
    private LocalDateTime deleteTime;

    /**
     * 最后访问时间
     */
    private LocalDateTime lastAccessTime;

    /**
     * 最后阅读时间
     */
    private LocalDateTime lastReadTime;

    /**
     * 是否归档
     */
    private Boolean isArchived;

    /**
     * 草稿内容
     */
    private String draftContent;

    /**
     * 草稿更新时间
     */
    private LocalDateTime draftUpdateTime;

    /**
     * 最后查看时间
     */
    private LocalDateTime lastViewTime;

    /**
     * 聊天背景设置
     */
    private String chatBackground;

    /**
     * 字体大小设置
     */
    private Integer fontSize;

    /**
     * 消息提示音设置
     */
    private String notificationSound;

    /**
     * 扩展设置（JSON格式）
     */
    private String extraSettings;

    /**
     * 增加未读数
     */
    public void incrementUnreadCount() {
        this.unreadCount = (this.unreadCount == null ? 0 : this.unreadCount) + 1;
    }

    /**
     * 清零未读数
     */
    public void clearUnreadCount() {
        this.unreadCount = 0;
    }

    /**
     * 检查是否已置顶
     *
     * @return 是否已置顶
     */
    public boolean isTopSession() {
        return isTop != null && isTop;
    }

    /**
     * 检查是否免打扰
     *
     * @return 是否免打扰
     */
    public boolean isDisturbFreeSession() {
        return isMuted != null && isMuted;
    }

    /**
     * 检查是否已删除
     *
     * @return 是否已删除
     */
    public boolean isDeletedSession() {
        return getIsDeleted() != null && getIsDeleted() == 1;
    }

    /**
     * 检查是否有草稿
     * 
     * @return 是否有草稿
     */
    public boolean hasDraft() {
        return draftContent != null && !draftContent.trim().isEmpty();
    }
}
